package Runde1;

import java.util.*;

public class Test {
	
	static private LVAManager lman = new LVAManager();
	
	@SuppressWarnings("deprecation")
	public static void main(String[] args) {

		//--------------------------------------------------------------------------------------------------
		
		System.out.println("LVA-Erstellung-bezogene Tests:");
		
		//Erstellen diverser Daten
		Date start = new Date(1992,10,15);
		Date end = new Date(1992,10,20);
		Date abm = new Date(1992,10,25);
		
		//Erstellen von LVA mit falschen Daten
		System.out.print("\nErstelle LVA mit Abmelde-Datum vor Anmelde-End-Datum ... ");
		createLVA(0, "eprog", start, abm, end, 10);
		System.out.print("\nErstelle LVA mit Abmelde-Datum vor Anmelde-Anfangs-Datum ... ");
		abm.setDate(10);
		createLVA(0, "eprog", start, end, abm, 10);
		System.out.print("\nErstelle LVA mit Ammelde-End-Datum vor Anmelde-Anfangs-Datum ... ");
		abm.setDate(25);
		end.setDate(10);
		createLVA(0, "eprog", start, end, abm, 10);
		System.out.print("\nErstelle LVA mit gueltigen Daten ... ");
		end.setDate(20);
		createLVA(0, "eprog", start, end, abm, 10);

		//--------------------------------------------------------------------------------------------------
		
		System.out.println("\n\nStudenten-Erstellung-bezogene Tests:");
		
		//Erstellung eines gueltigen Studenten
		System.out.print("\nErstelle gueltigen Studenten ... ");
		Student Stud1 = createStud("1025231","Peter","Testenberger");

		//Weitere ungueltige Student-Erstellungen.
		System.out.print("\nErstelle Studenten mit matrNr mit ungültiger Länge ... ");
		createStud("10252322","Peter","Wurf");
		System.out.print("\nErstelle Studenten mit leerem Vornamen ... ");
		createStud("1041231","","XMan");
		System.out.print("\nErstelle Studenten mit leerem Nachnamen ... ");
		createStud("1041232","Josef","");
		
		//Anmelden eines Studenten bei LVA
		LVA testLVA = lman.getLVA(0);
		
		System.out.print("\nMelde Studenten zu frueh an ... ");
		reg(testLVA, Stud1, new Date(1992,10,14));
		System.out.print("\nMelde Studenten zu spaet an ... ");
		reg(testLVA, Stud1, new Date(1992,10,21));
		System.out.print("\nMelde Studenten rechtzeitig an ... ");
		reg(testLVA, Stud1, new Date(1992,10,17));
		
		//Abmelden eines Studenten bei LVA
		System.out.print("\nMelde Studenten zu spaet ab ...");
		dereg(testLVA, Stud1, new Date(1992,10,26));
		System.out.print("\nMelde Studenten rechtzeitig ab ...");
		dereg(testLVA, Stud1, new Date(1992,10,24));
		
		
		//--------------------------------------------------------------------------------------------------
		
		System.out.println("\n\nLVA-Liste(n)-bezogene Tests: ");
		
		System.out.print("\nMelde Studenten rechtzeitig an ... ");
		reg(testLVA, Stud1, new Date(1992,10,17));
		System.out.print("\n" + lman);
		
		System.out.print("\nGebe Liste aller angemeldeten Studenten von LVA Nr. 1 aus ... ");
		System.out.print("\n" + testLVA.getStudentList());
		
		System.out.print("\nMelde Studenten rechtzeitig ab ... ");
		dereg(testLVA, Stud1, new Date(1992,10,24));
		System.out.print("\n" + lman);
		System.out.print("\nFuege weitere LVA hinzu ... ");
		createLVA(1, "bprog", start, end, abm, 10);
		System.out.print("\n" + lman);

	}
	
	//Methode zum erstellen von Studenten, die Exceptions ausprintet
	private static Student createStud(String matrNr, String fName, String lName) {
		try {
			return new Student(matrNr, fName, lName);
		} catch (IllegalStudentException e) {
			System.out.print(e);
			return null;
		}
	}
	
	//Methode zum registrieren von Studenten, die Exceptions ausprintet
	private static void reg(LVA l, Student s, Date d) {
		try {
			l.register(s, d);
		} catch (CorruptDeRegistrationException e) {
			System.out.print(e);
		}
	}
	
	//Methode zum deregistrieren von Studenten, die Exceptions ausprintet
	private static void dereg(LVA l, Student s, Date d) {
		try {
			l.deregister(s, d);
		} catch (CorruptDeRegistrationException e) {
			System.out.print(e);
		}
	}
	
	//Methode zum erstellen von LVAs die, die 
	private static void createLVA(int lvaNr, String title, Date earliestRegistration, Date latestRegistration, Date deregistration, int maxMembers) {
		try {
			lman.createLVA(lvaNr, title, earliestRegistration, latestRegistration, deregistration, maxMembers);
		} catch (IllegalLVAException e) {
			System.out.print(e);
		}
	}
}